// m

// 给定两个以字符串形式表示的非负整数num1和num2
// 要求返回num1和num2的乘积，它们的乘积也表示为字符串形式

// 注意： num1和num2的长度小于110,
// num1和num2只包含数字0-9
// num1和num2均不以0开头，除非是数字0本身
// 不能使用任何标准库的大叔类型，或者直接将输入转为整数来处理

// 思路： 使用数组来模拟大数乘法
// 长度len(num1)的整数num1和len(num2)的整数num2相乘的结果长度为len(num1) + len(num2) - 1或者len(num1) + len(num2),所以我们可以用
// len(num1) + len(num2)的整数数组nums来存储两个整数相乘之后的结果

function multiply(num1, num2) {
    if (num1 === '0' || num2 === '0') {
        return '0'
    }
    let len1 = num1.length
    let len2 = num2.length
    let nums = new Array(len1 + len2).fill(0)

    for (let i = len1 - 1; i >= 0; i--) {
        let digit1 = Number(num1[i])
        for (let j = len2 - 1; j >= 0; j--) {
            let digit2 = Number(num2[j])
            nums[i + j + 1] += digit1 * digit2
        }
    }
    console.log(nums)
    for (let i = len1 + len2 - 1; i >= 1; i--) {
        nums[i - 1] += Math.floor(nums[i] / 10)
        nums[i] %= 10
    }
    console.log(nums)
    let ans = ''
    for (let i = nums[0] === 0 ? 1 : 0; i < nums.length; i++) {
        ans += nums[i]        
    }
    return ans
}

let num1 = "123", num2 = "456"
console.log(multiply(num1, num2));
